home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / SNNSV32.ZIP / SNNSv3.2 / xgui / sources / ui_selection.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-25  |  18.1 KB  |  645 lines

  1. /*****************************************************************************
  2.   FILE           : ui_selection.c
  3.   SHORTNAME      : select.c
  4.   SNNS VERSION   : 3.2
  5.  
  6.   PURPOSE        :
  7.   NOTES          : UI_SELECTION_SIZE is no more in use! (defined in ui.h)
  8.  
  9.   AUTHOR         : Tilman Sommer
  10.   DATE           : 1.2.1990
  11.  
  12.   CHANGED BY     :
  13.   IDENTIFICATION : @(#)ui_selection.c    1.11 3/2/94
  14.   SCCS VERSION   : 1.11
  15.   LAST CHANGE    : 3/2/94
  16.  
  17.              Copyright (c) 1990-1994  SNNS Group, IPVR, Univ. Stuttgart, FRG
  18.              
  19. ******************************************************************************/
  20.  
  21.  
  22. #include <stdio.h>
  23. #include <malloc.h>
  24.  
  25. #include "ui.h"
  26.  
  27. #include "kr_ui.h"
  28.  
  29. #include "ui_utilP.h"
  30. #include "ui_textP.h"
  31. #include "ui_status.h"
  32. #include "ui_display.h"
  33. #include "ui_netUpdate.h"
  34. #include "ui_confirmer.h"
  35. #include "ui_xGraphic.h"
  36. #include "ui_color.h"
  37. #include "ui_event.h"
  38. #include "ui_mainP.h"
  39.  
  40.  
  41. #include "ui_selection.ph"
  42.  
  43.  
  44. /*****************************************************************************
  45.   FUNCTION : ui_sel_msgNumber
  46.  
  47.   PURPOSE  : show the number of selected items
  48.   RETURNS  : alteration of the status message
  49.   NOTES    :
  50.  
  51.   UPDATE   :
  52. *****************************************************************************/
  53.  
  54. void ui_sel_msgNumber (void)
  55.  
  56.     ui_stat_displayStatus(ui_gridPosMouse);
  57. }
  58.  
  59.  
  60. /*****************************************************************************
  61.   FUNCTION : ui_sel_initSelectionList
  62.  
  63.   PURPOSE  : initialize the selection list and selection counters
  64.   RETURNS  : void
  65.   NOTES    :
  66.  
  67.   UPDATE   :
  68. *****************************************************************************/
  69.  
  70. void ui_sel_initSelectionList (void)
  71.  
  72. {
  73.     ui_sel_numberOfItems          = 0;
  74.     ui_sel_numberOfSelectedItems  = 0;
  75.     ui_sel_listPtr                = NULL;
  76.     ui_sel_freeListPtr            = NULL;
  77. }
  78.  
  79.  
  80. /*****************************************************************************
  81.   FUNCTION : ui_sel_createItem
  82.  
  83.   PURPOSE  : allocate size for one item from the heap and set default values
  84.   RETURNS  : pointer to that new item
  85.   NOTES    :
  86.  
  87.   UPDATE   :
  88. *****************************************************************************/
  89.  
  90. static struct SelectionType *ui_sel_createItem (void)
  91.  
  92. {
  93.     struct SelectionType  *selPtr;
  94.  
  95.     selPtr = (struct SelectionType *) malloc(sizeof(struct SelectionType));
  96.     if (selPtr != NULL) {
  97.     (*selPtr).unitNo     = 0;
  98.     (*selPtr).subNetNo   = 0;
  99.     (*selPtr).gridPos.x  = 0;
  100.     (*selPtr).gridPos.y  = 0;
  101.     (*selPtr).gridPos.z  = 0;
  102.     (*selPtr).flags      = UI_NO_FLAG;
  103.     (*selPtr).nextPtr    = NULL;
  104.     ui_sel_numberOfItems += 1;
  105.     }
  106.     return (selPtr);
  107. }
  108.  
  109.  
  110. /*****************************************************************************
  111.   FUNCTION : ui_sel_lookForItem
  112.  
  113.   PURPOSE  : look for an selected item with this no
  114.   RETURNS  : pointer to that item, if it was found, else NULL
  115.   NOTES    : By calling this routine it is garanteed that never two items
  116.              with the same position exist.
  117.  
  118.   UPDATE   :
  119. *****************************************************************************/
  120.  
  121. struct SelectionType *ui_sel_lookForItem (int unitNo)
  122.  
  123. {
  124.     struct SelectionType  *selPtr;
  125.  
  126.     selPtr = ui_sel_listPtr;
  127.     while ((selPtr != NULL) AND ((*selPtr).unitNo != unitNo))
  128.     selPtr = (*selPtr).nextPtr;
  129.     
  130.     if (selPtr != NULL)
  131.     if ((*selPtr).unitNo != unitNo)
  132.         /* there is no item at this position, set signal */
  133.         selPtr = NULL;
  134.  
  135.     return (selPtr);
  136. }
  137.  
  138.  
  139. /*****************************************************************************
  140.   FUNCTION : ui_sel_lookForSelectedItem
  141.  
  142.   PURPOSE  : search from the list item according to SelectionPtr until the end
  143.              of the list or a selected item was found.
  144.   RETURNS  : a pointer to this element or NULL, if no (more) elements are 
  145.              found.
  146.   NOTES    : 
  147.  
  148.   UPDATE   :
  149. *****************************************************************************/
  150.  
  151. struct SelectionType *ui_sel_lookForSelectedItem 
  152.                 (struct SelectionType *SelectionPtr)
  153.  
  154. {
  155.     struct SelectionType  *selPtr;
  156.  
  157.     selPtr = SelectionPtr;
  158.     while ((selPtr != NULL) AND 
  159.        (ui_utilIsNotSet((*selPtr).flags, UI_SELECTED)))
  160.     selPtr = (*selPtr).nextPtr;
  161.  
  162.     return (selPtr);
  163. }
  164.  
  165.  
  166. /*****************************************************************************
  167.   FUNCTION : ui_sel_freeItem
  168.  
  169.   PURPOSE  : links the item in the free list
  170.   RETURNS  : 
  171. *****************************************************************************/
  172.  
  173. static void ui_sel_freeItem (struct SelectionType *selectionPtr)
  174.  
  175. {
  176.     struct SelectionType  *selPtr;
  177.  
  178.     if (ui_sel_listPtr == selectionPtr) { /* is first element */
  179.     ui_sel_listPtr        = selectionPtr->nextPtr;
  180.     selectionPtr->nextPtr = ui_sel_freeListPtr;
  181.     ui_sel_freeListPtr    = selectionPtr;
  182.     ui_sel_numberOfSelectedItems -= 1;
  183.     } else { /* second, third, ... element */
  184.     selPtr = ui_sel_listPtr;
  185.     while ((selPtr->nextPtr != selectionPtr) AND
  186.            (selPtr->nextPtr != NULL)) 
  187.         selPtr = selPtr->nextPtr;
  188.  
  189.     if (selPtr->nextPtr == selectionPtr) { /* item was found */
  190.         selPtr->nextPtr       = selectionPtr->nextPtr;
  191.         selectionPtr->nextPtr = ui_sel_freeListPtr;
  192.         ui_sel_freeListPtr    = selectionPtr;
  193.         ui_sel_numberOfSelectedItems -= 1;
  194.     }
  195.     }
  196. }
  197.     
  198.  
  199. /*****************************************************************************
  200.   FUNCTION : ui_sel_getFreeItem
  201.  
  202.   PURPOSE  : looks in the free list for an item. If no one is found, 
  203.              ui_sel_createItem() is called to create a new one.
  204.   RETURNS  : a pointer to a free item or NULL if malloc() fails
  205. *****************************************************************************/
  206.  
  207. static struct SelectionType *ui_sel_getFreeItem (void)
  208.  
  209. {
  210.     struct SelectionType  *selPtr;
  211.  
  212.     if (ui_sel_freeListPtr == NULL) { /* no free item */
  213.     selPtr             = ui_sel_createItem(); /* create a new item */
  214.     } else {
  215.     selPtr             = ui_sel_freeListPtr;
  216.     ui_sel_freeListPtr = selPtr->nextPtr;
  217.     }
  218.     if (selPtr != NULL) {
  219.     /* link it in the list as the first element */
  220.     (*selPtr).nextPtr = ui_sel_listPtr;
  221.     ui_sel_listPtr    = selPtr;
  222.     }
  223.     return (selPtr);
  224. }
  225.     
  226.  
  227. /*****************************************************************************
  228.   FUNCTION : ui_sel_drawBoxes
  229.  
  230.   PURPOSE  : draw outline of all selected units
  231.   RETURNS  :  void
  232.   NOTES    : 
  233.  
  234.   UPDATE   :
  235. *****************************************************************************/
  236.  
  237. void ui_sel_drawBoxes (struct Ui_DisplayType *displayPtr, FlagType scope,
  238.         struct PosType gridPos)
  239.  
  240. {   
  241.     struct PosType  pos1, pos2, pixOffset;
  242.     struct Ui_DisplayType *dPtr;
  243.     struct SelectionType  *selPtr;
  244.  
  245.     if (scope == UI_GLOBAL) {
  246.     for (dPtr = ui_displ_listPtr;
  247.          dPtr != NULL;
  248.          dPtr = dPtr ->nextPtr) 
  249.         ui_sel_drawBoxes(dPtr, UI_LOCAL, gridPos);
  250.     } else { /* UI_LOCAL */
  251.  
  252.     pixOffset.x = displayPtr->gridSize * gridPos.x;
  253.     pixOffset.y = displayPtr->gridSize * gridPos.y;
  254.     
  255.     XSetFunction(ui_display, ui_gc, GXinvert);
  256.     XSetBackground(ui_display, ui_gc, 
  257.                ui_backgroundColor);
  258.     XSetForeground(ui_display, ui_gc, 
  259.                ui_textColor);
  260.     
  261.     if (ui_col_colorDisplay)
  262.         XSetPlaneMask(ui_display, ui_gc, 
  263.               ui_textColor 
  264.               BIT_XOR 
  265.               ui_backgroundColor);
  266.     
  267.     for (selPtr = ui_sel_listPtr;
  268.          selPtr != NULL;
  269.          selPtr = selPtr->nextPtr) {
  270.         
  271.         if ((NOT displayPtr->frozen) AND 
  272.         (displayPtr->subNetNo == ui_currentDisplay->subNetNo)) {
  273.         
  274.         pos1    = ui_utilGridToPix(displayPtr, selPtr->gridPos);
  275.         pos1.x -= ((ui_selectionSize+2) / 2) - pixOffset.x;
  276.         pos1.y -= ((ui_selectionSize+2) / 2) - pixOffset.y;
  277.         pos2.x  = pos1.x + ui_selectionSize+2 - 1;
  278.         pos2.y  = pos1.y + ui_selectionSize+2 - 1;
  279.         ui_xDrawBox(ui_display, displayPtr->drawable, ui_gc, 
  280.                 pos1, pos2);
  281.         }
  282.     }
  283.     }
  284.  
  285.     if (ui_col_colorDisplay)
  286.     XSetPlaneMask(ui_display, ui_gc, AllPlanes);
  287. }
  288.  
  289.  
  290. /*****************************************************************************
  291.   FUNCTION : ui_sel_showSelectedItem
  292.  
  293.   PURPOSE  : show the selection marker of a given unit
  294.   RETURNS  : alteration of the graphic
  295.   NOTES    : When performed a second time the selection marker will disappear,
  296.              because the INVERT raster operation is used to draw the marker.
  297.  
  298.   UPDATE   :
  299. *****************************************************************************/
  300.  
  301. static void ui_sel_showSelectedItem (struct Ui_DisplayType *displayPtr,
  302.         FlagType scope, int unitNo, struct PosType gridPos)
  303.  
  304. {   
  305.     struct PosType  pos1, pos2;
  306.     struct Ui_DisplayType *dPtr;
  307.  
  308.     if (scope == UI_GLOBAL) {
  309.     for (dPtr = ui_displ_listPtr;
  310.          dPtr != NULL;
  311.          dPtr = dPtr ->nextPtr)
  312.         ui_sel_showSelectedItem(dPtr, UI_LOCAL, unitNo, gridPos);
  313.     } else {
  314.     if ((NOT displayPtr->frozen) AND 
  315.         ui_isUnitVisibleInDisplay(displayPtr, unitNo)) { 
  316.         if (ui_col_colorDisplay) {
  317.         XSetFunction(ui_display, ui_gc, GXcopy);
  318.         XSetBackground(ui_display, ui_gc, 
  319.                    ui_backgroundColor);
  320.         XSetForeground(ui_display, ui_gc, 
  321.                    ui_selectionColor);
  322.         } else {
  323.         XSetFunction(ui_display, ui_gc, GXcopyInverted);
  324.         XSetBackground(ui_display, ui_gc, 
  325.                    ui_backgroundColor);
  326.         XSetForeground(ui_display, ui_gc, 
  327.                    ui_textColor);
  328.         }
  329.         
  330.         pos1    = ui_utilGridToPix(displayPtr, gridPos);
  331.         pos1.x -= (ui_selectionSize / 2);
  332.         pos1.y -= (ui_selectionSize / 2);
  333.         pos2.x  = pos1.x + ui_selectionSize - 1;
  334.         pos2.y  = pos1.y + ui_selectionSize - 1;
  335.         /* ui_xDeleteRect(ui_display, displayPtr->drawable, 
  336.            ui_gc, pos1, pos2); */
  337.         if (ui_col_colorDisplay)
  338.         ui_xDeleteRect(ui_display, displayPtr->drawable, ui_gc,
  339.                    pos1, pos2);
  340.         else {
  341.         ui_xDeleteRect(ui_display, displayPtr->drawable, ui_gc,
  342.                    pos1, pos2);
  343.         XSetFunction(ui_display, ui_gc, GXcopy);
  344.         ui_xDrawCrossBox(ui_display, displayPtr->drawable, 
  345.                  ui_gc, pos1, pos2);
  346.         }
  347.     }
  348.     }
  349. }
  350.  
  351.  
  352. /*****************************************************************************
  353.   FUNCTION : ui_sel_doActionSelect
  354.  
  355.   PURPOSE  : This routine does all the action which are needed to perform a
  356.              selection of a given unit.
  357.   RETURNS  : void
  358.   NOTES    : The actions are:
  359.              - set flag and position
  360.          - increase selection counters
  361.          - show the selection in the graohic window
  362.  
  363.   UPDATE   :
  364. *****************************************************************************/
  365.  
  366. static void ui_sel_doActionSelect (struct Ui_DisplayType *displayPtr,
  367.     FlagType scope, struct SelectionType *selPtr, int unitNo,
  368.     struct PosType gridPos)
  369.  
  370. {
  371.     (*selPtr).flags    = UI_SELECTED;
  372.     (*selPtr).unitNo   = unitNo;
  373.     (*selPtr).gridPos  = gridPos;
  374.     (*selPtr).subNetNo = displayPtr->subNetNo;
  375.  
  376.     ui_sel_numberOfSelectedItems += 1;
  377.    
  378.     ui_sel_showSelectedItem(displayPtr, scope, unitNo, gridPos);
  379. }
  380.  
  381.  
  382. /*****************************************************************************
  383.   FUNCTION : ui_sel_selectedOne
  384.  
  385.   PURPOSE  : select a unit at the given position
  386.   RETURNS  : alteration of the selection list
  387.   NOTES    : If the unit is selected yet, the unit will be still selected
  388.              after calling this routine. If there is no unit, nothing will
  389.          be made.
  390.  
  391.   UPDATE   :
  392. *****************************************************************************/
  393.  
  394. void ui_sel_selectOne (struct Ui_DisplayType *displayPtr, FlagType scope, 
  395.         int unitNo, struct PosType gridPos)
  396.  
  397. {
  398.     struct SelectionType  *selPtr;
  399.     char   buf[80];
  400.  
  401.     selPtr = ui_sel_lookForItem(unitNo);  /* already an item ? */    
  402.     if (selPtr != NULL) { /* there is already an item */
  403.     if (ui_utilIsNotSet((*selPtr).flags, UI_SELECTED)) {
  404.         /* select only, if still not selected; else do nothing */
  405.         if (ui_isUnitVisibleInAnyDisplay(selPtr->unitNo)) {
  406.         ui_sel_doActionSelect(displayPtr, scope, selPtr, unitNo, gridPos);
  407.         } else {
  408.         ui_sel_freeItem(selPtr);
  409.         }
  410.     }
  411.     } else { /* no item at gridPos found */
  412.     if (ui_isUnitVisibleInAnyDisplay(unitNo)) {
  413.         if ((selPtr = ui_sel_getFreeItem()) == NULL) {
  414.         sprintf(buf,"No memory left to select unit %d!",unitNo);
  415.         ui_confirmOk(buf);
  416.         } else
  417.         ui_sel_doActionSelect(displayPtr, scope, selPtr, 
  418.                       unitNo, gridPos);
  419.     }
  420.     }
  421. }
  422.  
  423.  
  424. /*****************************************************************************
  425.   FUNCTION : ui_sel_unselectedOne
  426.  
  427.   PURPOSE  : unselect a unit at the given position
  428.   RETURNS  : alteration of the selection list
  429.   NOTES    : see ui_sel_selectOne()
  430.  
  431.   UPDATE   : 
  432. *****************************************************************************/ 
  433.  
  434. void ui_sel_unselectOne (struct Ui_DisplayType *displayPtr, FlagType scope,
  435.         int unitNo, struct PosType gridPos)
  436.  
  437. {
  438.     struct SelectionType  *selPtr;
  439.  
  440.     selPtr = ui_sel_lookForItem(unitNo); /* Is there an item ? */
  441.     if (selPtr != NULL) { /* an item with this position exists */
  442.     if (ui_utilIsSet((*selPtr).flags, UI_SELECTED)) {
  443.         /* And is still selected */
  444.         (*selPtr).flags = UI_NO_FLAG;
  445.         ui_sel_freeItem(selPtr);
  446.         ui_net_drawUnit(displayPtr, scope, unitNo, UI_DRAW);
  447.     }
  448.     }
  449. }
  450.  
  451.  
  452. /*****************************************************************************
  453.   FUNCTION : ui_sel_selectRect
  454.  
  455.   PURPOSE  : select all units within a rectangle area determined by the upper
  456.              left and bottom right positions (inclusive border!).
  457.   RETURNS  : alteration of the selection list
  458.   NOTES    :
  459.  
  460.   UPDATE   :
  461. *****************************************************************************/
  462.  
  463. void ui_sel_selectRect (struct Ui_DisplayType *displayPtr, FlagType scope,
  464.         struct PosType upperLeft, struct PosType lowerRight)
  465.  
  466. {
  467.     struct PosType  gridPos;
  468.     int             unitNo;
  469.  
  470.     for (unitNo = krui_getFirstUnit();
  471.      unitNo > 0;
  472.      unitNo = krui_getNextUnit()) {
  473.     krui_getUnitPosition(unitNo, &gridPos);
  474.     if ((displayPtr->subNetNo == krui_getUnitSubnetNo(unitNo)) AND
  475.         (gridPos.x >= upperLeft.x) AND
  476.         (gridPos.x <= lowerRight.x) AND
  477.         (gridPos.y >= upperLeft.y) AND
  478.         (gridPos.y <= lowerRight.y))
  479.         /* the unit is in this area */
  480.         ui_sel_selectOne(displayPtr, scope, unitNo, gridPos);
  481.     }
  482.     ui_sel_msgNumber(); 
  483. }
  484.  
  485.  
  486. /*****************************************************************************
  487.   FUNCTION : ui_sel_unselectRect
  488.  
  489.   PURPOSE  : unselect all units within a rectangle area determined by the upper
  490.              left and bottom right positions (inclusive border!).
  491.   RETURNS  : alteration of the selection list
  492.   NOTES    :
  493.  
  494.   UPDATE   :
  495. *****************************************************************************/
  496.  
  497. void ui_sel_unselectRect (struct Ui_DisplayType *displayPtr, FlagType scope, 
  498.         struct PosType upperLeft, struct PosType lowerRight)
  499.  
  500. {
  501.     struct PosType  gridPos;
  502.     int             unitNo;
  503.  
  504.     for (unitNo = krui_getFirstUnit();
  505.      unitNo > 0;
  506.      unitNo = krui_getNextUnit()) {
  507.     krui_getUnitPosition(unitNo, &gridPos);
  508.     if ((displayPtr->subNetNo == krui_getUnitSubnetNo(unitNo)) AND
  509.         (gridPos.x >= upperLeft.x) AND
  510.         (gridPos.x <= lowerRight.x) AND
  511.         (gridPos.y >= upperLeft.y) AND
  512.         (gridPos.y <= lowerRight.y))
  513.         /* the unit is in this area */
  514.         ui_sel_unselectOne(displayPtr, scope, unitNo, gridPos);
  515.     }
  516.     ui_sel_msgNumber(); 
  517. }
  518.  
  519.  
  520. /*****************************************************************************
  521.   FUNCTION : ui_sel_reshowItems
  522.  
  523.   PURPOSE  : show (and erase!) the selection markers of all selected units.
  524.   RETURNS  : alteration of the graphic
  525.   NOTES    : When called a second time, this routine erases all markers, cause
  526.              they were drawn with the XOR raster operation.
  527.  
  528.   UPDATE   :
  529. *****************************************************************************/
  530.  
  531. void ui_sel_reshowItems (struct Ui_DisplayType *displayPtr, FlagType scope)
  532.  
  533. {
  534.     struct SelectionType  *selPtr;
  535.  
  536.     selPtr = ui_sel_listPtr;
  537.     /* reshow all selected items */
  538.     while ((selPtr != NULL)) {
  539.     if (ui_utilIsSet((*selPtr).flags,UI_SELECTED))
  540.         ui_sel_showSelectedItem(displayPtr, scope, 
  541.                     (*selPtr).unitNo, (*selPtr).gridPos);
  542.     selPtr = (*selPtr).nextPtr;
  543.     }
  544.     ui_sel_msgNumber(); 
  545. }
  546.  
  547.  
  548. /*****************************************************************************
  549.   FUNCTION : ui_sel_checkList
  550.  
  551.   PURPOSE  : checks, whether selected units should be unselected because of
  552.              1) layers are changed (unit is unvisible now)
  553.          2) no display with the specified subnetNo exist.
  554.   RETURNS  : alteration of the graphic
  555.   NOTES    : 
  556.  
  557.   UPDATE   :
  558. *****************************************************************************/
  559.  
  560. void ui_sel_checkList (struct Ui_DisplayType *displayPtr, FlagType scope)
  561.  
  562. {
  563.     struct SelectionType  *selPtr, *tmpPtr;
  564.     struct Ui_DisplayType *dPtr;
  565.  
  566.     dPtr = ui_displ_listPtr;
  567.     while (dPtr != NULL) {
  568.     selPtr = ui_sel_listPtr;
  569.     while ((selPtr != NULL)) {
  570.         if (NOT ui_isUnitVisibleInDisplay(dPtr, selPtr->unitNo)) {
  571.         /* now this selected unit is unvisible !! */
  572.         /* hide selection marker */
  573.         ui_sel_showSelectedItem(dPtr, UI_LOCAL, 
  574.                     selPtr->unitNo, selPtr->gridPos);
  575.         tmpPtr = selPtr;
  576.         selPtr = selPtr->nextPtr;
  577.         ui_sel_freeItem(tmpPtr);
  578.         } else
  579.         selPtr = selPtr->nextPtr;
  580.     }
  581.     dPtr = dPtr->nextPtr;
  582.     }
  583.     ui_sel_msgNumber();
  584. }
  585.  
  586.  
  587. /*****************************************************************************
  588.   FUNCTION : ui_sel_unselectAll
  589.  
  590.   PURPOSE  : unselect all units.
  591.   RETURNS  : alteration of the selection list and the graphic
  592.   NOTES    : The markers must be visible when calling this routine!
  593.  
  594.   UPDATE   :
  595. *****************************************************************************/
  596.  
  597. void ui_sel_unselectAll (struct Ui_DisplayType *displayPtr, FlagType scope)
  598.  
  599. {
  600.     while (ui_sel_listPtr != NULL) {
  601.     if (ui_utilIsSet(ui_sel_listPtr->flags, UI_SELECTED)) {
  602.         ui_sel_unselectOne(displayPtr, scope, ui_sel_listPtr->unitNo,
  603.                    ui_sel_listPtr->gridPos);
  604.     } else
  605.         ui_sel_freeItem(ui_sel_listPtr);
  606.     }
  607.     ui_sel_msgNumber(); 
  608. }
  609.     
  610.  
  611. /*****************************************************************************
  612.   FUNCTION : ui_sel_resetList
  613.  
  614.   PURPOSE  : reset of the selection list for the specified mode (UI_EDITOR
  615.              or UI_SIMULATOR). No graphic update is made, so all markers must
  616.          be unvisible or the network will be dran with 
  617.          ui_net_completeRefresh().
  618.   RETURNS  : alteration of the selection list
  619.   NOTES    :
  620.  
  621.   UPDATE   :
  622. *****************************************************************************/
  623.  
  624. void ui_sel_resetList (void)
  625.  
  626. {
  627.     while (ui_sel_listPtr != NULL) {
  628.     ui_sel_listPtr->flags = UI_NO_FLAG;
  629.     ui_sel_freeItem(ui_sel_listPtr);
  630.     }
  631.     ui_sel_msgNumber(); 
  632. }
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642. /* end of file */
  643. /* lines: 678 */
  644.